/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Sucursal;
import sv.com.intesal.conexion.cConexion;
import sv.com.intesal.seguridad.bean.ParametroFacturacion;
import sv.com.intesal.seguridad.sql.SQLParametroFacturacion;

/**
 *
 * @author JM
 */
public class ParametroFacturacionControlador {

    public List<ParametroFacturacion> fillGrid() throws Exception {
        List<ParametroFacturacion> list = new ArrayList<ParametroFacturacion>();

        try {
            ResultSet rs = cConexion.conectar().prepareStatement(SQLParametroFacturacion.getParametroFacturaciones).executeQuery();
            while (rs.next()) {
                ParametroFacturacion pf = new ParametroFacturacion();

                pf.setCodigo_pf(rs.getInt("codigo_pf"));
                pf.setIva(rs.getDouble("iva"));
                pf.setRetencion(rs.getDouble("retencion"));
                pf.setPercepcion(rs.getDouble("percepcion"));
                pf.setValor_percepcion(rs.getDouble("valor_percepcion"));
                pf.setValor_retencion(rs.getDouble("valor_retencion"));

//                List<Sucursal> sList = new ArrayList<Sucursal>();
//                Sucursal su = new Sucursal();
//                su.setNombre_s(rs.getString("nombre_s"));
//                su.setDireccion_s(rs.getString("direccion_s"));
//                su.setFax(rs.getString("fax_s"));
//                su.setCodigo_s(rs.getInt("codigo_s"));
                //sList.add(su);

                pf.setCodigo_s(rs.getInt("codigo_s"));
                pf.setNombre_s(rs.getString("nombre_s"));

                //pf.setSucursal(su);
                list.add(pf);
            }
            rs.close();

            return list;
        } catch (Exception ex) {
            throw new Exception(ex);
        }

    }

    public List<ParametroFacturacion> getParametroFacturacionSucursal() throws Exception {
        /*Por SUCURSAL*/
        List<ParametroFacturacion> list = new ArrayList<ParametroFacturacion>();

        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection cnn = null;

        try {
            SessionControlador sc = new SessionControlador();
            ps = cnn.prepareStatement(SQLParametroFacturacion.getParametroFacturacionSucursal);
            ps.setInt(1, sc.getCodigo_Sucursal());

            rs = ps.executeQuery();

            while (rs.next()) {
                ParametroFacturacion pf = new ParametroFacturacion();

                pf.setCodigo_pf(rs.getInt("codigo_s"));
                pf.setIva(rs.getDouble("iva"));
                pf.setRetencion(rs.getDouble("retencion"));
                pf.setPercepcion(rs.getDouble("percepcion"));
                pf.setValor_percepcion(rs.getDouble("valor_percepcion"));
                pf.setValor_retencion(rs.getDouble("valor_retencion"));

                List<Sucursal> sList = new ArrayList<Sucursal>();

                Sucursal su = new Sucursal();
                su.setNombre_s(rs.getString("nombre_s"));
                su.setDireccion_s(rs.getString("direccion_s"));
                su.setFax(rs.getString("fax_s"));
                sList.add(su);

                pf.setCodigo_s(rs.getInt("codigo_s"));
                pf.setNombre_s(rs.getString("nombre_s"));

                pf.setSucursal(su);
                list.add(pf);
            }
            rs.close();
            ps.close();
            cnn.close();

            return list;
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public void mantenimientoParametroFacturacion(ParametroFacturacion pf) throws Exception {
        PreparedStatement ps = null;
        Connection cnn = null;

        try {
            cnn = cConexion.conectar();
            if (this.validar_count(pf.getCodigo_s()) == false) {
                ps = cnn.prepareStatement(SQLParametroFacturacion.insertParametroFacturacion);
                ps.setInt(6, pf.getCodigo_s());
            } else {
                ps = cnn.prepareStatement(SQLParametroFacturacion.updateParametroFacturacion);
                ps.setInt(6, pf.getCodigo_pf());
            }
            ps.setDouble(1, pf.getIva());
            ps.setDouble(2, pf.getRetencion());
            ps.setDouble(3, pf.getPercepcion());
            ps.setDouble(4, pf.getValor_retencion());
            ps.setDouble(5, pf.getValor_percepcion());
            ps.executeUpdate();

            cnn.close();
            ps.close();

            Mensaje m = new Mensaje();
            if (pf.getCodigo_pf() == null) {
                m.messageInfo(m.getIinformation());
            } else {
                m.messageInfo(m.getImodificada());
            }
        } catch (Exception ex) {
            throw new Exception(ex);
        }

    }

    private Boolean validar_count(Integer codigo_s) throws Exception {
        try {

            PreparedStatement ps = null;
            Connection cnn = null;
            cnn = cConexion.conectar();

            ps = cnn.prepareStatement(SQLParametroFacturacion.getCountSucursalParametroFacturacion);
            ps.setInt(1, codigo_s);
            ResultSet rs = ps.executeQuery();
            rs.next();

            if (rs.getInt("count") == 0) {
                return false;
            }
            return true;
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public void setParametrosInicialesSucursal() throws Exception {
        try {
            Connection cnn = null;

            ResultSet rs = cConexion.conectar().prepareStatement(SQLParametroFacturacion.getMax).executeQuery();
            rs.next();
            Integer codigo_s = rs.getInt("max");

            PreparedStatement ps = null;
            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLParametroFacturacion.insertParametroFacturacion);
            ps.setInt(1, codigo_s);
            ps.setDouble(2, 0.0);
            ps.setDouble(3, 0.0);
            ps.setDouble(4, 0.0);
            ps.setDouble(5, 0.0);
            ps.setDouble(6, 0.0);
            ps.executeUpdate();

        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public Integer getMax() throws Exception {
        try {
            Connection cnn = null;
            ResultSet rs = cConexion.conectar().prepareStatement(SQLParametroFacturacion.getMaxPF).executeQuery();
            rs.next();
            return rs.getInt("max");
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public Double getIva() throws Exception {
        try {
            ResultSet rs = null;
            rs = this.getParametros();
            rs.next();
            return rs.getDouble("iva");
        } catch (Exception ex) {
            ex.printStackTrace();
            return 0.0;
        }
    }

    public Double getRetencion() throws Exception {
        try {
            ResultSet rs = null;
            rs = this.getParametros();

            rs.next();
            return rs.getDouble("retencion");
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public Double getPercepcion() throws Exception {
        try {
            ResultSet rs = null;
            rs = this.getParametros();

            rs.next();
            return rs.getDouble("percepcion");
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public Double getValorPercepcion() throws Exception {
        try {
            ResultSet rs = null;
            rs = this.getParametros();

            rs.next();
            return rs.getDouble("valor_percepcion");
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public Double getValorRetencion() throws Exception {
        try {
            ResultSet rs = null;
            rs = this.getParametros();

            rs.next();
            return rs.getDouble("valor_retencion");
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public ParametroFacturacion getParametro() throws Exception {

        try {
            Connection cnn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            SessionControlador session = new SessionControlador();

            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLParametroFacturacion.getParametroFacturacionSucursal);
            ps.setInt(1, session.getCodigo_Sucursal());
            rs = ps.executeQuery();
            rs.next();

            ParametroFacturacion pf = new ParametroFacturacion();
            pf.setCodigo_pf(rs.getInt("codigo_pf"));
            pf.setIva(rs.getDouble("iva"));
            pf.setRetencion(rs.getDouble("retencion"));
            pf.setPercepcion(rs.getDouble("percepcion"));
            pf.setValor_percepcion(rs.getDouble("valor_percepcion"));
            pf.setValor_retencion(rs.getDouble("valor_retencion"));
            pf.setCodigo_s(rs.getInt("codigo_s"));
            pf.setNombre_s(rs.getString("nombre_s"));

            ps.close();
            rs.close();
            cnn.close();
            return pf;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public ResultSet getParametros() throws Exception {
        try {
            Connection cnn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            SessionControlador session = new SessionControlador();
            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLParametroFacturacion.getParametroFacturacionSucursal);
            ps.setInt(1, session.getCodigo_Sucursal());
            rs = ps.executeQuery();
            return rs;
        } catch (Exception ex) {
            throw new Exception(ex);
        }

    }
}
